﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;

namespace ArraysExample
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] firstArray = new int[3] {1, 3, 2};
            
            //Найти минимальный элемент массива
            int minValue = firstArray.Min();

            //Найти максимальный элемент массива
            int maxValue = firstArray.Max();

            //Найти количество элементов массива
            int arrayLength = firstArray.Length;

            //Найти на какой     позиции в массиве находится 3
            int indexOf3 = Array.IndexOf(firstArray, 3);
            
            //Отсортировать массив по возрастанию. Исходный массив будет изменен
            Array.Sort(firstArray);

            //Разместить элементы массива задом на перед. Исходный массив будет изменен.
            Array.Reverse(firstArray);

            //Очистить первые 2 элемента массива. 0 - позиция с которой начинаем очищать элементы
            Array.Clear(firstArray, 0, 2);

            Console.WriteLine();

        }

        static int[] FillArrayFromConsole(int arraySize)
        {
            int[] array = new int[arraySize];
            for (int i = 0; i < arraySize; i++)
            {
                Console.Write("[{0}]: ", i);
                array[i] = Int32.Parse(Console.ReadLine());
            }
            return array;
        }

        //Найти максимальный элемент массива. Вывести на экран элементы массива и максимум.
        static void MaxNumberInArray()
        {
            Console.Clear();
            Console.WriteLine("Enter 5 numbers");
            int max = Int32.MinValue;
            int[] numbers = new int[5];


            //for (int i = 0; i < 5; i++)
            //{
            //    Console.Write("Enter number: ");
            //    numbers[i] = Int32.Parse(Console.ReadLine());

            //}

            numbers = FillArrayFromConsole(5);

            Console.WriteLine("Elements in array:");
            for (int i = 0; i < numbers.Length; i++)
            {
                Console.Write("{0}, ", numbers[i]);
                if (numbers[i] > max)
                {
                    max = numbers[i];
                }
            }
            Console.WriteLine("Maximum number is {0}", max);
        }

        static void OneDimensionArraysExample()
        {
            //Одномерные массивы

            Console.WriteLine("IntArray:");
            int[] numbers = { 1, 2, 3 };
            //Доступ к элементу массива
            //numbers[0] = 1;

            //Ошибка
            //numbers[3] = 3;

            //Пройти по элементам массива и вывести их на экран
            for (int i = 0; i < numbers.Length; i++)
                Console.WriteLine(numbers[i]);

            //Используя foreach нельзя изменять размер коллекции и элементы
            foreach (int number in numbers)
            {
                Console.WriteLine(number);
            }

            Console.WriteLine("Количество элементов в массиве: {0}"
                                , numbers.Length);

            Console.WriteLine();
            Console.WriteLine("boolArray:");
            bool[] boolArray = new bool[3];
            boolArray[0] = true;
            Console.WriteLine(boolArray[0]);
            Console.WriteLine(boolArray[1]);
            Console.WriteLine(boolArray[2]);

            Console.WriteLine();
            Console.WriteLine("stringArray:");
            string[] stringArray = new string[3];

            Console.WriteLine(stringArray[0]);
            Console.WriteLine(stringArray[1]);
            Console.WriteLine(stringArray[2]);
        }

        static void DwoDimensionArraysExample()
        {
            int[,] table = new int[2, 3];

            //Заполнить массив значениями из консоли
            Console.WriteLine("Введите элементы массива:");
            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    Console.Write("[{0},{1}]: ",i,j);
                    table[i,j] = Int32.Parse(Console.ReadLine());
                }
            }

            //Вывод на печать двухмерного массива

            //Ходим по строкам
            for (int i = 0; i < 2; i++)
            {
                //Ходим по столбцам
                for (int j = 0; j<3; j++)
                {
                    Console.Write("{0} ",table[i,j]);
                }
                Console.WriteLine();
            }
        }
    }
}
